/* 
 * File:   Partida.h
 * Author: 75.02 - Grupo 7, 2do cuatrimestre 2012.
 *
 * Created on November 2, 2012, 12:19 PM
 */

#ifndef PARTIDA_H
#define	PARTIDA_H

#include <vector>
#include <string>
#include "Jugador.h"
#include "Escenario.h"
#include "ISerializable.h"

using namespace std;
using namespace TP::Juego;
using namespace TP::Serializacion;
using namespace TP::Juego::Arena;

namespace TP { namespace Juego { 

class Partida : public ISerializable {

public:
    
    Partida();

    /**
     * Crea una partida nueva con un nombre y un id que la identifican.
     * Carga un mundo/nivel a partir de un archivo XML.
     */
    Partida(const string& pNombre, Escenario* pEscenario, Jugador* pJugador);

    /**
     * Libera los recursos asociados con la instancia.
     */
    virtual ~Partida();
    
    const string& getNombre();
    
    /**
     * No se que hace esta =P.
     * @return 
     */
    Escenario* ArenaJuego ();
    
    vector<Jugador*>& getJugadores();

    virtual string aXML();
    
    virtual string aXML(const string& pPath);
    
    virtual void parseXML (const string& pDescriptor);
    
    virtual TiXmlElement* aElementoXML ();
    
    virtual void deElementoXML (TiXmlElement* pElemento);
    
    static Partida* crearDeXML (const string& pDescriptor) throw (Excepcion&);
    
private:
    string _nombre;
    Escenario* _arenaJuego;
    vector<Jugador*> _jugadores;
    Jugador* _jugadorAdm;
};
    
}}

#endif	/* PARTIDA_H */

